package LeetCode刷题;

/**
 * @program: Java_Study
 * @author: Xiaofan
 * @createTime: 2021-09-06 21:28
 * @description: Functions of this class is
 **/
public class No承最多水的容器 {
    /**
     * 在保证两条柱子之间距离尽可能大的情况下，找到两条柱子之间比较矮的那条，然后每次都计算出面积 最后找到面积最大的
     */
    public static void main(String args[]) {
        int nums[] = {4, 3, 2, 1, 4};
        System.out.println(maxArea(nums));
    }

    public static int maxArea(int[] height) {
        //运用双指针法，从头尾开始计算，是从底部距离最大的那里开始
        //设置初始指针一头一尾，开始计数
        int i = 0;
        int j = height.length- 1;
        //ans这里不能设定为Integer.MIN_VALUE，其初始值要设定为一开始最两边的柱子围成的面积，不然的话，后面会计算不到这两条柱子
        int ans = Math.min(height[i], height[j]) * (j-i);//然后计算最开始围成的面积
        while (i != j) {
            //找到两个指针所指的柱子值较小的那个，向前或者向后移动
            //移动柱子值较小的是因为：只要指针移动了，其底部距离都是变短的了，所以就要找到柱子值较小的那个来移动，保留柱子值较高的那个，来保证面积减小的少，从而找到面积最大的
            if (height[i] <= height[j]) {
                i++;
            } else {
                j--;
            }
            ans=Math.max(ans,Math.min(height[i], height[j]) * (j-i));//在每次移动中找到面积最大的记录下来
        }
        return ans;
    }
}